from django.db import models
from django.contrib.auth.models import User

class Provincia(models.Model):
        nombre = models.CharField(max_length=100)
        def __unicode__(self):
                return self.nombre


class Universidad(models.Model):
        acronimo = models.CharField(max_length=15, null=True)
        nombre = models.CharField(max_length=100)
        provincia = models.ForeignKey(Provincia)
        calle = models.TextField(null=True)
        numero = models.CharField(max_length=10,null=True,blank=True)
        CP = models.IntegerField(null=True)
        telefono = models.CharField(max_length=9)
        fax = models.CharField(max_length=9, blank=True, null=True)
        def __unicode__(self):
                return self.acronimo + " - " + self.nombre
        def getFacultades(self):
                return Facultad.objects.filter(pk=self.pk)


class Facultad(models.Model):
        acronimo = models.CharField(max_length=15, null=True, blank=True)
        nombre = models.CharField(max_length=100,null=True,unique=True)
        calle = models.TextField(null=True)
        numero = models.CharField(max_length=10,null=True,blank=True)
        CP = models.IntegerField(null=True)
        telefono = models.CharField(max_length=15)
        fax = models.CharField(max_length=15, blank=True, null=True)
        universidad = models.ForeignKey(Universidad)
        def __unicode__(self):
                return self.nombre


class Departamento(models.Model):
	acronimo = models.CharField(max_length=15,null=True,blank=True)
        nombre = models.CharField(max_length=100,null=True)
        facultad = models.ForeignKey(Facultad,null=True)
        def __unicode__(self):
                return str(self.nombre)
        def getFacultades(self):
                return Facultad.objects.filter(pk=self.pk)


class Planta(models.Model):
        nombre = models.CharField(max_length=100)
        facultad = models.ForeignKey(Facultad)
        comentario = models.TextField(null=True,blank=True)
        def __unicode__(self):
                return self.nombre + " - " + str(self.facultad)


class Elemento(models.Model):
        nombre = models.CharField(max_length=100)
        def __unicode__(self):
                return self.nombre


class PerfilAula(models.Model):
        nombre = models.CharField(max_length=100)
	prioridad = models.PositiveIntegerField(max_length=1,null=True)
        def __unicode__(self):
                return self.nombre


class Aula(models.Model):
        nombre = models.CharField(max_length=100)
        facultad = models.ForeignKey(Facultad,null=True)
        planta = models.ForeignKey(Planta,null=True)
        perfil = models.ForeignKey(PerfilAula,null=True)
        comentario = models.TextField(null=True,blank=True)
        elementos = models.ManyToManyField(Elemento, through='AulaPosee',null=True)
        def __unicode__(self):
                return self.nombre+" - "+str(self.facultad)
        def getElementos(self):
                return AulaContieneElemento.objects.filter(aula=self)
        def getReservas(self):
                return Reserva.objects.filter(aula=self)


class AulaPosee (models.Model):
        aula = models.ForeignKey(Aula)
        elemento = models.ForeignKey(Elemento)
        cantidad = models.PositiveIntegerField(null=True)


class Peticion(models.Model):
        alias = models.ForeignKey(User,null=True)
        aula = models.ForeignKey(Aula)
        estado = models.CharField(max_length=1, choices=(('0','0'),('1','1'),('2','2')) )
        fecha_realizada = models.DateField(auto_now=True)
        fecha_comienzo = models.DateTimeField()
        fecha_finalizacion = models.DateTimeField(null=True, blank=True)
	concepto = models.TextField(max_length=100,null=True)
        def __unicode__(self):
                return str(self.alias)+" - "+str(self.aula)


class Reserva(models.Model):
        peticion = models.OneToOneField(Peticion,null=True)
        precio = models.IntegerField(null=True)
        def __unicode__(self):
                return str(self.peticion)
	def copia(self,pet):
		self.peticion = pet
		return self

class Privilegios(models.Model):
        prioridad = models.PositiveIntegerField(null=True)
        def __unicode__(self):
                return str(self.prioridad)


class PerfilUsuario(models.Model):
        nombre = models.CharField(max_length=100,null=True,unique=True)
        prioridad = models.ManyToManyField(Privilegios)
        def __unicode__(self):
                return self.nombre
        def getPerfilUsuario(self, nombre):
                return self.objects.filter(self.usuario__username==nombre)


class Atributos(models.Model):
        nombre = models.CharField(max_length=100,null=True,unique=True)
        tipo = models.CharField(max_length=100,null=True)
        def __unicode__(self):
                return str(self.nombre)


class TipoUsuario(models.Model):
        nombre = models.CharField(max_length=100,null=True,unique=True)
        atributos = models.ManyToManyField(Atributos)
        usuario = models.ManyToManyField(User)
        def __unicode__(self):
                return str(self.nombre)

class TAlumno(models.Model):
        alias = models.OneToOneField(User,null=True,unique=True)
        nombre = models.CharField(max_length=30,null=True)
        apellido1 = models.CharField(max_length=20,null=True)
        apellido2 = models.CharField(max_length=20,null=True)
        DNI = models.CharField(max_length=9,null=True,unique=True)
        calle = models.TextField(null=True)
        numero = models.CharField(max_length=10,null=True,blank=True)
        CP = models.IntegerField(null=True)
        telefono = models.CharField(max_length=9)
        correo_electronico = models.CharField(max_length=30, blank=True, null=True)
        estudia_en = models.ManyToManyField(Facultad)
	perfil = models.ManyToManyField(PerfilUsuario)
        def __unicode__(self):
                return str(self.nombre)+" "+str(self.apellido1)+" "+str(self.apellido2)


class TProfesor(models.Model):
        alias = models.OneToOneField(User,null=True,unique=True)
        nombre = models.CharField(max_length=30,null=True)
        apellido1 = models.CharField(max_length=20,null=True)
        apellido2 = models.CharField(max_length=20,null=True)
        DNI = models.CharField(max_length=9,null=True,unique=True)
        calle = models.TextField(null=True)
        numero = models.CharField(max_length=10,null=True,blank=True)
        CP = models.IntegerField(null=True)
        telefono = models.CharField(max_length=9,null=True)
        correo_electronico = models.CharField(max_length=30, blank=True, null=True)
        pertenece_a = models.ForeignKey(Departamento,null=True)
	perfil = models.ManyToManyField(PerfilUsuario)
        def __unicode__(self):
                return str(self.nombre)+" "+str(self.apellido1)+" "+str(self.apellido2)

class TSecretario(models.Model):
        alias = models.OneToOneField(User,null=True,unique=True)
        nombre = models.CharField(max_length=30,null=True)
        apellido1 = models.CharField(max_length=20,null=True)
        apellido2 = models.CharField(max_length=20,null=True)
        DNI = models.CharField(max_length=9,null=True,unique=True)
        calle = models.TextField(null=True)
        numero = models.CharField(max_length=10,null=True,blank=True)
        CP = models.IntegerField(null=True)
        telefono = models.CharField(max_length=9,null=True)
        correo_electronico = models.CharField(max_length=30, blank=True, null=True)
        trabaja_en = models.ForeignKey(Facultad,null=True)
        perfil = models.ManyToManyField(PerfilUsuario)
	def __unicode__(self):
                return str(self.nombre)+" "+str(self.apellido1)+" "+(self.apellido2)




